/**
 * 
 */
package cn.ivicar.passport.service;

import java.util.List;

import com.google.inject.Inject;

import cn.com.carsmart.exception.CarsmartException;
import cn.com.carsmart.ws.ibatis.model.BaseExample;
import cn.com.carsmart.ws.model.ValidateCode;
import cn.com.carsmart.ws.service.ValidateCodeManager;

/**
 * @author liurunbin 2017年5月16日
 */
public class CaptchaService {

	@Inject
	private ValidateCodeManager validateCodeManager;

	/**
	 * 获取验证码（手机号和服务类型）
	 * @param mobile 手机号
	 * @param serviceType 服务类型：注册or修改密码
	 * @param useStatus
	 * @return 过期时间最新的验证码
	 */
	public ValidateCode getByMobileAndType(String mobile, String serviceType, Integer useStatus) {
		ValidateCode code = new ValidateCode();
		code.setMobile(mobile);

		BaseExample example = validateCodeManager.getExample();
		//example.or()...设立where查询条件
		example.or().andPropertyEqualTo(mobile, "mobile").andPropertyEqualTo(serviceType, "serviceType")
				.andPropertyEqualTo(useStatus, "useStatus");
		//按照expired字段的降序排序
		example.setOrderByClause("expired desc");
		List<ValidateCode> list = this.validateCodeManager.listByExample(code);
		if (list == null || list.isEmpty()) {
			return null;
		}
		return list.get(0);
	}

	/**
	 * 获取验证码（手机号和验证码）
	 * @param mobile 手机号
	 * @param captcha 验证码
	 * @param bizType 服务类型：注册or修改密码
	 * @return
	 */
	public ValidateCode getByMobileAndCode(String mobile, String captcha, String bizType) {
		ValidateCode code = new ValidateCode();
		code.setMobile(mobile);
		code.setValidateCode(captcha);
		code.setServiceType(bizType);
		List<ValidateCode> list = this.validateCodeManager.listByExample(code);
		if (list == null || list.isEmpty()) {
			return null;
		}
		return list.get(0);
	}

	/**
	 * 将验证码存进数据库
	 * @param validateCode
	 * @return 验证码存储结果
	 * @throws CarsmartException
	 */
	public int insert(ValidateCode validateCode) throws CarsmartException {
		//设置验证码为未使用状态
		validateCode.setUseStatus(0);
		int result = validateCodeManager.insert(validateCode);
		return result;
	}

	/**
	 * 验证码更新
	 * @param validateCode
	 * @throws CarsmartException
	 */
	public void updateSelective(ValidateCode validateCode) throws CarsmartException {
		validateCodeManager.update(validateCode);

	}

}
